/*
 * BFS-like, but not BFS.
 * Since the queue used here can be any type of container, and the ordering does not matter.
 */
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

#define MAX 100

int adjmatrix[MAX][MAX];
int indegree[MAX];
int vertex, edge;

vector<int> topological_sort(int matrix[][MAX])
{
    queue<int> q;
    for (int i = 1; i <= vertex; i++) {
        if (indegree[i] == 0) {
            q.push(i);
        }
    }
    vector<int> topolist;
    while (!q.empty()) {
        int v = q.front();
        q.pop();
        topolist.push_back(v);
        for (int i = 1; i <= vertex; i++) {
            if (matrix[v][i] == 1) {
                indegree[i]--;
                if (indegree[i] == 0) {
                    q.push(i);
                }
            }
        }
    }
    if (topolist.size() != vertex) {
        cout << "cycle detected..." << endl;
        return vector<int>();
    }
    return topolist;
}

/*
Input:
5 4
1 2
2 3
1 3
1 5
Output:
1
4
2
5
3
 */
int main()
{
    int m, n;
    cin >> vertex >> edge;
    /* assuming value range is [1, vertex]. */
    for (int i = 0; i < edge; i++) {
        cin >> m >> n;
        adjmatrix[m][n] = 1;
        indegree[n]++;
    }
    vector<int> topolist = topological_sort(adjmatrix);
    for (vector<int>::const_iterator it = topolist.begin(); it != topolist.end(); it++) {
        cout << *it << endl;
    }
    return 0;
}
